package com.vben.ai.config;

import com.vben.ai.constant.ModelConstant;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ChatClientConfig {

    private final ChatModel chatModel;

    public ChatClientConfig(ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @Bean
    public ChatClient deepseekChatClient() {
        ChatOptions chatOptions = ChatOptions
                .builder()
                .model(ModelConstant.DEEP_SEEK_R1)
                .build();
        return ChatClient
                .builder(chatModel)
                // 实现 Chat Memory 的 Advisor
                // 在使用 Chat Memory 时，需要指定对话 ID，以便 Spring AI 处理上下文。
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(new InMemoryChatMemory())
                )
                // 实现 Logger 的 Advisor
                .defaultAdvisors(
                        new SimpleLoggerAdvisor()
                )
                .defaultOptions(chatOptions)
                .build();
    }

    @Bean
    public ChatClient qwenMaxChatClient() {
        ChatOptions chatOptions = ChatOptions.builder().model(ModelConstant.Qwen_Max).build();
        return ChatClient
                .builder(chatModel)
                // 实现 Chat Memory 的 Advisor
                // 在使用 Chat Memory 时，需要指定对话 ID，以便 Spring AI 处理上下文。
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(new InMemoryChatMemory())
                )
                // 实现 Logger 的 Advisor
                .defaultAdvisors(
                        new SimpleLoggerAdvisor()
                )
                .defaultOptions(chatOptions)
                .build();
    }

    @Bean
    public ChatClient qwenVLMaxLatestChatClient() {
        ChatOptions chatOptions = ChatOptions.builder().model(ModelConstant.Qwen_VL_Max_Latest).build();
        return ChatClient
                .builder(chatModel)
                // 实现 Chat Memory 的 Advisor
                // 在使用 Chat Memory 时，需要指定对话 ID，以便 Spring AI 处理上下文。
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(new InMemoryChatMemory())
                )
                // 实现 Logger 的 Advisor
                .defaultAdvisors(
                        new SimpleLoggerAdvisor()
                )
                .defaultOptions(chatOptions)
                .build();
    }

}
